home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
usenet
/
sources
/
volume2
/
languags
/
cdecl.2
< prev
next >
Wrap
Text File
|
1988-11-05
|
60KB
|
2,591 lines
Path: wucfua!wucs1!uunet!husc6!bbn!ulowell!page
From: page@swan.ulowell.edu (Bob Page)
Newsgroups: comp.sources.amiga
Subject: v02i055: cdecl - C & C++ declaration composer/decoder, Part02/03
Message-ID: <10054@swan.ulowell.edu>
Date: 4 Nov 88 23:10:28 GMT
Organization: University of Lowell, Computer Science Dept.
Lines: 2580
Approved: page@swan.ulowell.edu
Submitted-by: finkel@taurus.bitnet (Udi Finkelstein)
Posting-number: Volume 2, Issue 55
Archive-name: languages/cdecl.2
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# cdgram.c
# cdlex.c
# cdecl.notes
# This archive created: Fri Nov 4 18:01:31 1988
cat << \SHAR_EOF > cdgram.c
/* Yacc grammar for ANSI and C++ cdecl. */
/* The output of this file is included */
/* into the C file cdecl.c. */
char cdgramsccsid[] = "@(#)cdgram.y 2.2 3/30/88";
typedef union {
char *dynstr;
struct {
char *left;
char *right;
char *type;
} halves;
} YYSTYPE;
# define ARRAY 257
# define AS 258
# define CAST 259
# define COMMA 260
# define DECLARE 261
# define DOUBLECOLON 262
# define EXPLAIN 263
# define FUNCTION 264
# define HELP 265
# define INTO 266
# define OF 267
# define MEMBER 268
# define POINTER 269
# define REFERENCE 270
# define RETURNING 271
# define SET 272
# define TO 273
# define CHAR 274
# define CLASS 275
# define CONSTVOLATILE 276
# define DOUBLE 277
# define ENUM 278
# define FLOAT 279
# define INT 280
# define LONG 281
# define NAME 282
# define NUMBER 283
# define SHORT 284
# define SIGNED 285
# define STRUCT 286
# define UNION 287
# define UNSIGNED 288
# define VOID 289
# define AUTO 290
# define EXTERN 291
# define REGISTER 292
# define STATIC 293
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern short yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval, yyval;
# define YYERRCODE 256
short yyexca[] ={
-1, 1,
0, -1,
-2, 0,
-1, 27,
282, 81,
40, 81,
42, 81,
38, 81,
-2, 87,
-1, 37,
260, 31,
41, 31,
-2, 81,
-1, 87,
282, 82,
40, 82,
42, 82,
38, 82,
-2, 80,
-1, 92,
260, 31,
41, 31,
-2, 81,
};
# define YYNPROD 89
# define YYLAST 322
short yyact[]={
67, 79, 28, 69, 72, 68, 66, 76, 159, 13,
77, 75, 78, 73, 74, 70, 79, 16, 17, 18,
19, 16, 17, 18, 19, 67, 129, 78, 69, 103,
68, 66, 125, 25, 76, 39, 23, 77, 75, 128,
70, 74, 118, 22, 115, 137, 117, 118, 85, 115,
86, 117, 83, 23, 152, 25, 30, 100, 23, 10,
22, 56, 25, 23, 47, 22, 60, 59, 37, 97,
22, 121, 25, 40, 41, 123, 58, 25, 20, 34,
139, 110, 25, 161, 144, 93, 145, 92, 94, 32,
24, 57, 147, 71, 126, 29, 81, 21, 42, 55,
8, 136, 108, 150, 12, 135, 33, 106, 11, 114,
31, 10, 62, 151, 132, 134, 44, 45, 48, 49,
156, 43, 35, 2, 63, 15, 53, 1, 54, 14,
50, 64, 27, 65, 52, 101, 26, 46, 87, 82,
61, 38, 0, 90, 80, 88, 0, 0, 89, 0,
95, 96, 98, 108, 91, 108, 0, 0, 108, 0,
11, 0, 51, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 109, 0, 111, 104, 102, 0,
0, 0, 105, 112, 107, 0, 122, 99, 0, 113,
0, 119, 120, 0, 0, 0, 0, 127, 0, 0,
0, 0, 0, 0, 0, 124, 131, 0, 133, 0,
0, 0, 0, 142, 0, 0, 130, 143, 0, 0,
0, 0, 0, 0, 0, 138, 146, 140, 141, 148,
0, 149, 0, 0, 0, 0, 127, 0, 0, 0,
153, 0, 0, 25, 158, 0, 0, 127, 0, 128,
155, 160, 16, 17, 18, 19, 154, 0, 0, 0,
0, 157, 0, 0, 0, 0, 0, 25, 0, 0,
0, 0, 0, 128, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 116, 0, 0, 0,
0, 116, 84, 0, 0, 0, 0, 0, 0, 36,
0, 0, 145, 145, 92, 9, 0, 0, 5, 0,
4, 0, 6, 0, 3, 0, 0, 0, 0, 0,
0, 7 };
short yypact[]={
-1000, 49,-1000, 101,-273,-204, -38,-226,-1000, 101,
-1000,-1000,-1000,-169,-194,-1000,-1000,-1000,-1000,-1000,
-187, 101, 28,-248,-196,-214,-212,-214,-214, 101,
-1000,-1000,-269, 101,-194,-1000,-194,-221,-191,-1000,
-206,-207,-1000,-274,-1000,-1000, 10,-214, 10,-1000,
-1000,-194,-1000, 101,-1000, 44,-170,-1000,-194,-199,
-194,-1000,-249,-1000,-225,-247,-1000,-1000,-1000,-1000,
-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
10, 101, 67,-214,-181,-214, 10,-1000, 101, 9,
101,-1000,-221,-200,-194,-1000,-1000,-192,-1000,-1000,
-1000,-1000,-1000,-1000, 101,-1000, -9,-1000, -67, 10,
72, 10, 74,-1000, 64, 4,-182, 9, 9,-1000,
-173,-194,-1000,-259,-1000,-1000, 43,-1000,-1000,-1000,
-1,-1000, 10,-1000,-1000,-226,-1000,-1000, 62, 71,
11, 11,-1000,-228,-1000,-243, 9,-1000,-1000, 101,
80, 9,-194,-174, 11,-1000, -33, 11,-1000,-1000,
42,-1000 };
short yypgo[]={
0, 99, 141, 140, 109, 94, 96, 139, 101, 137,
93, 112, 135, 133, 90, 95, 129, 125, 131, 124,
98, 91, 127, 123, 100, 121 };
short yyr1[]={
0, 22, 22, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 24, 24, 15, 15, 6,
6, 6, 6, 7, 7, 7, 7, 7, 5, 5,
5, 1, 1, 1, 1, 1, 4, 4, 4, 4,
4, 4, 4, 4, 4, 8, 8, 21, 21, 21,
21, 21, 21, 21, 2, 2, 20, 25, 3, 3,
3, 3, 18, 18, 18, 10, 10, 19, 19, 19,
19, 19, 11, 11, 12, 12, 13, 13, 13, 13,
14, 14, 9, 17, 17, 17, 17, 16, 16 };
short yyr2[]={
0, 0, 2, 2, 6, 4, 5, 3, 6, 5,
5, 8, 3, 1, 2, 1, 1, 1, 0, 1,
3, 4, 3, 3, 4, 2, 3, 1, 3, 3,
1, 0, 3, 1, 1, 3, 0, 2, 5, 6,
3, 4, 2, 2, 2, 2, 3, 3, 6, 4,
4, 8, 4, 2, 0, 1, 2, 0, 1, 1,
2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
2, 0, 2, 1, 1, 1, 1, 1, 0 };
short yychk[]={
-1000, -22, -23, 265, 261, 259, 263, 272, -24, 256,
10, 59, -24, 282, -16, -17, 290, 291, 292, 293,
282, -21, 264, 257, -14, 276, -16, -17, 40, -15,
282, -24, 258, -21, 266, -24, 271, 40, -2, 283,
269, 270, -20, -25, -14, -14, -9, 276, -14, -14,
-24, -16, -24, -21, -21, -1, 282, -21, 267, 273,
273, -3, -11, -19, -18, -13, 280, 274, 279, 277,
289, -10, 278, 287, 288, 285, 281, 284, 286, 275,
-20, -6, -7, 42, 282, 38, 40, -14, -6, -20,
-21, -24, 260, 41, 258, -21, -21, 268, -21, -19,
282, -12, -11, 276, -6, -24, 40, -8, 91, -14,
262, -14, -6, -24, -4, 40, 282, 42, 38, -24,
-1, 271, -21, 267, -24, 41, -5, -14, 282, 93,
283, -6, 42, -6, 41, 41, -8, 41, -4, 262,
-4, -4, -21, -10, 41, 260, -20, 93, -6, -15,
41, 42, 282, -5, -4, -24, 40, -4, -21, 41,
-5, 41 };
short yydef[]={
1, -2, 2, 0, 88, 81, 88, 18, 13, 0,
15, 16, 3, 0, 81, 87, 83, 84, 85, 86,
0, 0, 0, 54, 57, 81, 81, -2, 81, 0,
17, 14, 88, 0, 81, 7, 81, -2, 0, 55,
0, 0, 53, 0, 80, 57, 0, 81, 0, 57,
12, 81, 5, 0, 47, 0, 33, 34, 81, 81,
81, 56, 58, 59, 0, 73, 67, 68, 69, 70,
71, 62, 63, 64, 76, 77, 78, 79, 65, 66,
0, 0, 19, 81, 27, 81, 0, -2, 0, 36,
0, 6, -2, 0, 81, 49, 50, 0, 52, 60,
61, 72, 74, 75, 0, 10, 81, 25, 0, 0,
0, 0, 0, 9, 0, 36, 0, 36, 36, 4,
32, 81, 35, 0, 8, 23, 0, 57, 30, 45,
0, 20, 0, 22, 26, 18, 44, 37, 0, 0,
42, 43, 48, 0, 24, 81, 36, 46, 21, 0,
40, 36, 81, 28, 29, 11, 81, 41, 51, 38,
0, 39 };
#ifndef lint
static char yaccpar_sccsid[] = "@(#)yaccpar 1.2 86/07/18 SMI"; /* from UCB 4.1 83/02/11 */
#endif
#
# define YYFLAG -1000
# define YYERROR goto yyerrlab
# define YYACCEPT return(0)
# define YYABORT return(1)
/* parser for yacc output */
#ifdef YYDEBUG
int yydebug = 0; /* 1 for debugging */
#endif
YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
int yychar = -1; /* current input token number */
int yynerrs = 0; /* number of errors */
short yyerrflag = 0; /* error recovery flag */
yyparse() {
short yys[YYMAXDEPTH];
short yyj, yym;
register YYSTYPE *yypvt;
register short yystate, *yyps, yyn;
register YYSTYPE *yypv;
register short *yyxi;
yystate = 0;
yychar = -1;
yynerrs = 0;
yyerrflag = 0;
yyps= &yys[-1];
yypv= &yyv[-1];
yystack: /* put a state and value onto the stack */
#ifdef YYDEBUG
if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );
#endif
if( ++yyps>= &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
*yyps = yystate;
++yypv;
*yypv = yyval;
yynewstate:
yyn = yypact[yystate];
if( yyn<= YYFLAG ) goto yydefault; /* simple state */
if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
yychar = -1;
yyval = yylval;
yystate = yyn;
if( yyerrflag > 0 ) --yyerrflag;
goto yystack;
}
yydefault:
/* default state action */
if( (yyn=yydef[yystate]) == -2 ) {
if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
/* look through exception table */
for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
while( *(yyxi+=2) >= 0 ){
if( *yyxi == yychar ) break;
}
if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
}
if( yyn == 0 ){ /* error */
/* error ... attempt to resume parsing */
switch( yyerrflag ){
case 0: /* brand new error */
yyerror( "syntax error" );
yyerrlab:
++yynerrs;
case 1:
case 2: /* incompletely recovered error ... try again */
yyerrflag = 3;
/* find a state where "error" is a legal shift action */
while ( yyps >= yys ) {
yyn = yypact[*yyps] + YYERRCODE;
if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
yystate = yyact[yyn]; /* simulate a shift of "error" */
goto yystack;
}
yyn = yypact[*yyps];
/* the current yyps has no shift onn "error", pop stack */
#ifdef YYDEBUG
if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
#endif
--yyps;
--yypv;
}
/* there is no state on the stack with an error shift ... abort */
yyabort:
return(1);
case 3: /* no shift yet; clobber input char */
#ifdef YYDEBUG
if( yydebug ) printf( "error recovery discards char %d\n", yychar );
#endif
if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
yychar = -1;
goto yynewstate; /* try again in the same state */
}
}
/* reduction by production yyn */
#ifdef YYDEBUG
if( yydebug ) printf("reduce %d\n",yyn);
#endif
yyps -= yyr2[yyn];
yypvt = yypv;
yypv -= yyr2[yyn];
yyval = yypv[1];
yym=yyn;
/* consult goto table to find next state */
yyn = yyr1[yyn];
yyj = yypgo[yyn] + *yyps + 1;
if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
switch(yym){
case 2:
{
prompt();
prev = 0;
} break;
case 3:
{
Debug((stderr, "stmt: help\n"));
dohelp();
} break;
case 4:
{
Debug((stderr, "stmt: DECLARE NAME AS opt_storage adecl\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-4].dynstr));
Debug((stderr, "\topt_storage='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tacdecl.left='%s'\n", yypvt[-1].halves.left));
Debug((stderr, "\tacdecl.right='%s'\n", yypvt[-1].halves.right));
Debug((stderr, "\tacdecl.type='%s'\n", yypvt[-1].halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
dodeclare(yypvt[-4].dynstr, yypvt[-2].dynstr, yypvt[-1].halves.left, yypvt[-1].halves.right, yypvt[-1].halves.type);
} break;
case 5:
{
Debug((stderr, "stmt: DECLARE opt_storage adecl\n"));
Debug((stderr, "\topt_storage='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tacdecl.left='%s'\n", yypvt[-1].halves.left));
Debug((stderr, "\tacdecl.right='%s'\n", yypvt[-1].halves.right));
Debug((stderr, "\tacdecl.type='%s'\n", yypvt[-1].halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
dodeclare(NullCP, yypvt[-2].dynstr, yypvt[-1].halves.left, yypvt[-1].halves.right, yypvt[-1].halves.type);
} break;
case 6:
{
Debug((stderr, "stmt: CAST NAME AS adecl\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tacdecl.left='%s'\n", yypvt[-1].halves.left));
Debug((stderr, "\tacdecl.right='%s'\n", yypvt[-1].halves.right));
Debug((stderr, "\tacdecl.type='%s'\n", yypvt[-1].halves.type));
docast(yypvt[-3].dynstr, yypvt[-1].halves.left, yypvt[-1].halves.right, yypvt[-1].halves.type);
} break;
case 7:
{
Debug((stderr, "stmt: CAST adecl\n"));
Debug((stderr, "\tacdecl.left='%s'\n", yypvt[-1].halves.left));
Debug((stderr, "\tacdecl.right='%s'\n", yypvt[-1].halves.right));
Debug((stderr, "\tacdecl.type='%s'\n", yypvt[-1].halves.type));
docast(NullCP, yypvt[-1].halves.left, yypvt[-1].halves.right, yypvt[-1].halves.type);
} break;
case 8:
{
Debug((stderr, "stmt: EXPLAIN opt_storage opt_constvol_list type cdecl\n"));
Debug((stderr, "\topt_storage='%s'\n", yypvt[-4].dynstr));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\ttype='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
dodexplain(yypvt[-4].dynstr, yypvt[-3].dynstr, yypvt[-2].dynstr, yypvt[-1].dynstr);
} break;
case 9:
{
Debug((stderr, "stmt: EXPLAIN storage opt_constvol_list cdecl\n"));
Debug((stderr, "\tstorage='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
dodexplain(yypvt[-3].dynstr, yypvt[-2].dynstr, NullCP, yypvt[-1].dynstr);
} break;
case 10:
{
Debug((stderr, "stmt: EXPLAIN opt_storage constvol_list cdecl\n"));
Debug((stderr, "\topt_storage='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tconstvol_list='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
dodexplain(yypvt[-3].dynstr, yypvt[-2].dynstr, NullCP, yypvt[-1].dynstr);
} break;
case 11:
{
Debug((stderr, "stmt: EXPLAIN ( opt_constvol_list type cast ) optNAME\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-5].dynstr));
Debug((stderr, "\ttype='%s'\n", yypvt[-4].dynstr));
Debug((stderr, "\tcast='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tNAME='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
docexplain(yypvt[-5].dynstr, yypvt[-4].dynstr, yypvt[-3].dynstr, yypvt[-1].dynstr);
} break;
case 12:
{
Debug((stderr, "stmt: SET optNAME\n"));
Debug((stderr, "\toptNAME='%s'\n", yypvt[-1].dynstr));
doset(yypvt[-1].dynstr);
} break;
case 14:
{
yyerrok;
} break;
case 15:
{
doprompt();
} break;
case 16:
{
noprompt();
} break;
case 17:
{
Debug((stderr, "optNAME: NAME\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 18:
{
Debug((stderr, "optNAME: EMPTY\n"));
yyval.dynstr = ds(unknown_name);
} break;
case 20:
{
Debug((stderr, "cdecl: * opt_constvol_list cdecl\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-0].dynstr,yypvt[-1].dynstr,ds(strlen(yypvt[-1].dynstr)?" pointer to ":"pointer to "),NullCP);
prev = 'p';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 21:
{
Debug((stderr, "cdecl: NAME DOUBLECOLON '*' cdecl\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-0].dynstr));
if (!CplusplusFlag)
unsupp("pointer to member of class", NullCP);
yyval.dynstr = cat(yypvt[-0].dynstr,ds("pointer to member of class "),yypvt[-3].dynstr,ds(" "),NullCP);
prev = 'p';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 22:
{
Debug((stderr, "cdecl: & opt_constvol_list cdecl\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-0].dynstr));
if (!CplusplusFlag)
unsupp("reference", NullCP);
yyval.dynstr = cat(yypvt[-0].dynstr,yypvt[-1].dynstr,ds(strlen(yypvt[-1].dynstr)?" reference to ":"reference to "),NullCP);
prev = 'r';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 23:
{
Debug((stderr, "cdecl1: cdecl1()\n"));
Debug((stderr, "\tcdecl1='%s'\n", yypvt[-2].dynstr));
yyval.dynstr = cat(yypvt[-2].dynstr,ds("function returning "),NullCP);
prev = 'f';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 24:
{
Debug((stderr, "cdecl1: cdecl1(castlist)\n"));
Debug((stderr, "\tcdecl1='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tcastlist='%s'\n", yypvt[-1].dynstr));
yyval.dynstr = cat(yypvt[-3].dynstr, ds("function ("),
yypvt[-1].dynstr, ds(") returning "), NullCP);
prev = 'f';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 25:
{
Debug((stderr, "cdecl1: cdecl1 cdims\n"));
Debug((stderr, "\tcdecl1='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tcdims='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-1].dynstr,ds("array "),yypvt[-0].dynstr,NullCP);
prev = 'a';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 26:
{
Debug((stderr, "cdecl1: (cdecl)\n"));
Debug((stderr, "\tcdecl='%s'\n", yypvt[-1].dynstr));
yyval.dynstr = yypvt[-1].dynstr;
/* prev = prev; */
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 27:
{
Debug((stderr, "cdecl1: NAME\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-0].dynstr));
savedname = yypvt[-0].dynstr;
yyval.dynstr = ds("");
prev = 'n';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 28:
{
Debug((stderr, "castlist: castlist1, castlist2\n"));
Debug((stderr, "\tcastlist1='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tcastlist2='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-2].dynstr, ds(", "), yypvt[-0].dynstr, NullCP);
} break;
case 29:
{
Debug((stderr, "castlist: opt_constvol_list type cast\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\ttype='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tcast='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-0].dynstr, yypvt[-2].dynstr, ds(strlen(yypvt[-2].dynstr) ? " " : ""), yypvt[-1].dynstr, NullCP);
} break;
case 30:
{
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 31:
{
Debug((stderr, "adecllist: EMPTY\n"));
yyval.dynstr = ds("");
} break;
case 32:
{
Debug((stderr, "adecllist: adecllist1, adecllist2\n"));
Debug((stderr, "\tadecllist1='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tadecllist2='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-2].dynstr, ds(", "), yypvt[-0].dynstr, NullCP);
} break;
case 33:
{
Debug((stderr, "adecllist: NAME\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 34:
{
Debug((stderr, "adecllist: adecl\n"));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
yyval.dynstr = cat(yypvt[-0].halves.type, ds(" "), yypvt[-0].halves.left, yypvt[-0].halves.right, NullCP);
} break;
case 35:
{
Debug((stderr, "adecllist: NAME AS adecl\n"));
Debug((stderr, "\tNAME='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
yyval.dynstr = cat(yypvt[-0].halves.type, ds(" "), yypvt[-0].halves.left, yypvt[-2].dynstr, yypvt[-0].halves.right, NullCP);
} break;
case 36:
{
Debug((stderr, "cast: EMPTY\n"));
yyval.dynstr = ds("");
/* prev = prev; */
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 37:
{
Debug((stderr, "cast: ()\n"));
yyval.dynstr = ds("function returning ");
prev = 'f';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 38:
{
Debug((stderr, "cast: (cast)()\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-3].dynstr));
yyval.dynstr = cat(yypvt[-3].dynstr,ds("function returning "),NullCP);
prev = 'f';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 39:
{
Debug((stderr, "cast: (cast)(castlist)\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-4].dynstr));
Debug((stderr, "\tcastlist='%s'\n", yypvt[-1].dynstr));
yyval.dynstr = cat(yypvt[-4].dynstr,ds("function ("),yypvt[-1].dynstr,ds(") returning "),NullCP);
prev = 'f';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 40:
{
Debug((stderr, "cast: (cast)\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-1].dynstr));
yyval.dynstr = yypvt[-1].dynstr;
/* prev = prev; */
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 41:
{
Debug((stderr, "cast: NAME::*cast\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-0].dynstr));
if (!CplusplusFlag)
unsupp("pointer to member of class", NullCP);
yyval.dynstr = cat(yypvt[-0].dynstr,ds("pointer to member of class "),yypvt[-3].dynstr,ds(" "),NullCP);
prev = 'p';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 42:
{
Debug((stderr, "cast: *cast\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-0].dynstr,ds("pointer to "),NullCP);
prev = 'p';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 43:
{
Debug((stderr, "cast: &cast\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-0].dynstr));
if (!CplusplusFlag)
unsupp("reference", NullCP);
yyval.dynstr = cat(yypvt[-0].dynstr,ds("reference to "),NullCP);
prev = 'r';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 44:
{
Debug((stderr, "cast: cast cdims\n"));
Debug((stderr, "\tcast='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tcdims='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-1].dynstr,ds("array "),yypvt[-0].dynstr,NullCP);
prev = 'a';
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 45:
{
Debug((stderr, "cdims: []\n"));
yyval.dynstr = ds("of ");
} break;
case 46:
{
Debug((stderr, "cdims: [NUMBER]\n"));
Debug((stderr, "\tNUMBER='%s'\n", yypvt[-1].dynstr));
yyval.dynstr = cat(yypvt[-1].dynstr,ds(" of "),NullCP);
} break;
case 47:
{
Debug((stderr, "adecl: FUNCTION RETURNING adecl\n"));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
if (prev == 'f')
unsupp("Function returning function",
"function returning pointer to function");
else if (prev=='A' || prev=='a')
unsupp("Function returning array",
"function returning pointer");
yyval.halves.left = yypvt[-0].halves.left;
yyval.halves.right = cat(ds("()"),yypvt[-0].halves.right,NullCP);
yyval.halves.type = yypvt[-0].halves.type;
prev = 'f';
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 48:
{
Debug((stderr, "adecl: FUNCTION (adecllist) RETURNING adecl\n"));
Debug((stderr, "\tadecllist='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
if (prev == 'f')
unsupp("Function returning function",
"function returning pointer to function");
else if (prev=='A' || prev=='a')
unsupp("Function returning array",
"function returning pointer");
yyval.halves.left = yypvt[-0].halves.left;
yyval.halves.right = cat(ds("("),yypvt[-3].dynstr,ds(")"),yypvt[-0].halves.right,NullCP);
yyval.halves.type = yypvt[-0].halves.type;
prev = 'f';
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 49:
{
Debug((stderr, "adecl: ARRAY adims OF adecl\n"));
Debug((stderr, "\tadims='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
if (prev == 'f')
unsupp("Array of function",
"array of pointer to function");
else if (prev == 'a')
unsupp("Inner array of unspecified size",
"array of pointer");
else if (prev == 'v')
unsupp("Array of void",
"pointer to void");
if (arbdims)
prev = 'a';
else
prev = 'A';
yyval.halves.left = yypvt[-0].halves.left;
yyval.halves.right = cat(yypvt[-2].dynstr,yypvt[-0].halves.right,NullCP);
yyval.halves.type = yypvt[-0].halves.type;
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 50:
{
char *op = "", *cp = "", *sp = "";
Debug((stderr, "adecl: opt_constvol_list POINTER TO adecl\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
if (prev == 'a')
unsupp("Pointer to array of unspecified dimension",
"pointer to object");
if (prev=='a' || prev=='A' || prev=='f') {
op = "(";
cp = ")";
}
if (strlen(yypvt[-3].dynstr) != 0)
sp = " ";
yyval.halves.left = cat(yypvt[-0].halves.left,ds(op),ds("*"),
ds(sp),yypvt[-3].dynstr,ds(sp),NullCP);
yyval.halves.right = cat(ds(cp),yypvt[-0].halves.right,NullCP);
yyval.halves.type = yypvt[-0].halves.type;
prev = 'p';
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 51:
{
char *op = "", *cp = "", *sp = "";
Debug((stderr, "adecl: opt_constvol_list POINTER TO MEMBER OF ClassStruct NAME adecl\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-7].dynstr));
Debug((stderr, "\tClassStruct='%s'\n", yypvt[-2].dynstr));
Debug((stderr, "\tNAME='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
if (!CplusplusFlag)
unsupp("pointer to member of class", NullCP);
if (prev == 'a')
unsupp("Pointer to array of unspecified dimension",
"pointer to object");
if (prev=='a' || prev=='A' || prev=='f') {
op = "(";
cp = ")";
}
if (strlen(yypvt[-7].dynstr) != 0)
sp = " ";
yyval.halves.left = cat(yypvt[-0].halves.left,ds(op),yypvt[-1].dynstr,ds("::*"),
ds(sp),yypvt[-7].dynstr,ds(sp),NullCP);
yyval.halves.right = cat(ds(cp),yypvt[-0].halves.right,NullCP);
yyval.halves.type = yypvt[-0].halves.type;
prev = 'p';
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 52:
{
char *op = "", *cp = "", *sp = "";
Debug((stderr, "adecl: opt_constvol_list REFERENCE TO adecl\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-3].dynstr));
Debug((stderr, "\tadecl.left='%s'\n", yypvt[-0].halves.left));
Debug((stderr, "\tadecl.right='%s'\n", yypvt[-0].halves.right));
Debug((stderr, "\tadecl.type='%s'\n", yypvt[-0].halves.type));
if (!CplusplusFlag)
unsupp("reference", NullCP);
if (prev == 'v')
unsupp("Reference to void",
"pointer to void");
else if (prev == 'a')
unsupp("Reference to array of unspecified dimension",
"reference to object");
if (prev=='a' || prev=='A' || prev=='f') {
op = "(";
cp = ")";
}
if (strlen(yypvt[-3].dynstr) != 0)
sp = " ";
yyval.halves.left = cat(yypvt[-0].halves.left,ds(op),ds("&"),
ds(sp),yypvt[-3].dynstr,ds(sp),NullCP);
yyval.halves.right = cat(ds(cp),yypvt[-0].halves.right,NullCP);
yyval.halves.type = yypvt[-0].halves.type;
prev = 'r';
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 53:
{
Debug((stderr, "adecl: opt_constvol_list type\n"));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\ttype='%s'\n", yypvt[-0].dynstr));
yyval.halves.left = ds("");
yyval.halves.right = ds("");
yyval.halves.type = cat(yypvt[-1].dynstr,ds(strlen(yypvt[-1].dynstr)?" ":""),yypvt[-0].dynstr,NullCP);
if (strcmp(yypvt[-0].dynstr, "void") == 0)
prev = 'v';
else if ((strncmp(yypvt[-0].dynstr, "struct", 6) == 0) ||
(strncmp(yypvt[-0].dynstr, "class", 5) == 0))
prev = 's';
else
prev = 't';
Debug((stderr, "\n\tadecl now =\n"));
Debug((stderr, "\t\tadecl.left='%s'\n", yyval.halves.left));
Debug((stderr, "\t\tadecl.right='%s'\n", yyval.halves.right));
Debug((stderr, "\t\tadecl.type='%s'\n", yyval.halves.type));
Debug((stderr, "\tprev = '%s'\n", visible(prev)));
} break;
case 54:
{
Debug((stderr, "adims: EMPTY\n"));
arbdims = 1;
yyval.dynstr = ds("[]");
} break;
case 55:
{
Debug((stderr, "adims: NUMBER\n"));
Debug((stderr, "\tNUMBER='%s'\n", yypvt[-0].dynstr));
arbdims = 0;
yyval.dynstr = cat(ds("["),yypvt[-0].dynstr,ds("]"),NullCP);
} break;
case 56:
{
Debug((stderr, "type: tinit c_type\n"));
Debug((stderr, "\ttinit=''\n"));
Debug((stderr, "\tc_type='%s'\n", yypvt[-0].dynstr));
mbcheck();
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 57:
{
Debug((stderr, "tinit: EMPTY\n"));
modbits = 0;
} break;
case 58:
{
Debug((stderr, "c_type: mod_list\n"));
Debug((stderr, "\tmod_list='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 59:
{
Debug((stderr, "c_type: tname\n"));
Debug((stderr, "\ttname='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 60:
{
Debug((stderr, "c_type: mod_list tname\n"));
Debug((stderr, "\tmod_list='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\ttname='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-1].dynstr,ds(" "),yypvt[-0].dynstr,NullCP);
} break;
case 61:
{
Debug((stderr, "c_type: StrClaUniEnum NAME\n"));
Debug((stderr, "\tStrClaUniEnum='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tNAME='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-1].dynstr,ds(" "),yypvt[-0].dynstr,NullCP);
} break;
case 64:
{
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 66:
{
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 67:
{
Debug((stderr, "tname: INT\n"));
Debug((stderr, "\tINT='%s'\n", yypvt[-0].dynstr));
modbits |= MB_INT; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 68:
{
Debug((stderr, "tname: CHAR\n"));
Debug((stderr, "\tCHAR='%s'\n", yypvt[-0].dynstr));
modbits |= MB_CHAR; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 69:
{
Debug((stderr, "tname: FLOAT\n"));
Debug((stderr, "\tFLOAT='%s'\n", yypvt[-0].dynstr));
modbits |= MB_FLOAT; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 70:
{
Debug((stderr, "tname: DOUBLE\n"));
Debug((stderr, "\tDOUBLE='%s'\n", yypvt[-0].dynstr));
modbits |= MB_DOUBLE; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 71:
{
Debug((stderr, "tname: VOID\n"));
Debug((stderr, "\tVOID='%s'\n", yypvt[-0].dynstr));
modbits |= MB_VOID; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 72:
{
Debug((stderr, "mod_list: modifier mod_list1\n"));
Debug((stderr, "\tmodifier='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\tmod_list1='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = cat(yypvt[-1].dynstr,ds(" "),yypvt[-0].dynstr,NullCP);
} break;
case 73:
{
Debug((stderr, "mod_list: modifier\n"));
Debug((stderr, "\tmodifier='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 74:
{
Debug((stderr, "mod_list1: mod_list\n"));
Debug((stderr, "\tmod_list='%s'\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 75:
{
Debug((stderr, "mod_list1: CONSTVOLATILE\n"));
Debug((stderr, "\tCONSTVOLATILE='%s'\n", yypvt[-0].dynstr));
if (PreANSIFlag)
notsupported(" (Pre-ANSI Compiler)", yypvt[-0].dynstr, NullCP);
else if (RitchieFlag)
notsupported(" (Ritchie Compiler)", yypvt[-0].dynstr, NullCP);
else if ((strcmp(yypvt[-0].dynstr, "noalias") == 0) && CplusplusFlag)
unsupp(yypvt[-0].dynstr, NullCP);
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 76:
{
Debug((stderr, "modifier: UNSIGNED\n"));
Debug((stderr, "\tUNSIGNED='%s'\n", yypvt[-0].dynstr));
modbits |= MB_UNSIGNED; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 77:
{
Debug((stderr, "modifier: SIGNED\n"));
Debug((stderr, "\tSIGNED='%s'\n", yypvt[-0].dynstr));
modbits |= MB_SIGNED; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 78:
{
Debug((stderr, "modifier: LONG\n"));
Debug((stderr, "\tLONG='%s'\n", yypvt[-0].dynstr));
modbits |= MB_LONG; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 79:
{
Debug((stderr, "modifier: SHORT\n"));
Debug((stderr, "\tSHORT='%s'\n", yypvt[-0].dynstr));
modbits |= MB_SHORT; yyval.dynstr = yypvt[-0].dynstr;
} break;
case 80:
{
Debug((stderr, "opt_constvol_list: CONSTVOLATILE opt_constvol_list\n"));
Debug((stderr, "\tCONSTVOLATILE='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-0].dynstr));
if (PreANSIFlag)
notsupported(" (Pre-ANSI Compiler)", yypvt[-1].dynstr, NullCP);
else if (RitchieFlag)
notsupported(" (Ritchie Compiler)", yypvt[-1].dynstr, NullCP);
else if ((strcmp(yypvt[-1].dynstr, "noalias") == 0) && CplusplusFlag)
unsupp(yypvt[-1].dynstr, NullCP);
yyval.dynstr = cat(yypvt[-1].dynstr,ds(strlen(yypvt[-0].dynstr) ? " " : ""),yypvt[-0].dynstr,NullCP);
} break;
case 81:
{
Debug((stderr, "opt_constvol_list: EMPTY\n"));
yyval.dynstr = ds("");
} break;
case 82:
{
Debug((stderr, "constvol_list: CONSTVOLATILE opt_constvol_list\n"));
Debug((stderr, "\tCONSTVOLATILE='%s'\n", yypvt[-1].dynstr));
Debug((stderr, "\topt_constvol_list='%s'\n", yypvt[-0].dynstr));
if (PreANSIFlag)
notsupported(" (Pre-ANSI Compiler)", yypvt[-1].dynstr, NullCP);
else if (RitchieFlag)
notsupported(" (Ritchie Compiler)", yypvt[-1].dynstr, NullCP);
else if ((strcmp(yypvt[-1].dynstr, "noalias") == 0) && CplusplusFlag)
unsupp(yypvt[-1].dynstr, NullCP);
yyval.dynstr = cat(yypvt[-1].dynstr,ds(strlen(yypvt[-0].dynstr) ? " " : ""),yypvt[-0].dynstr,NullCP);
} break;
case 86:
{
Debug((stderr, "storage: AUTO,EXTERN,STATIC,REGISTER (%s)\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 87:
{
Debug((stderr, "opt_storage: storage=%s\n", yypvt[-0].dynstr));
yyval.dynstr = yypvt[-0].dynstr;
} break;
case 88:
{
Debug((stderr, "opt_storage: EMPTY\n"));
yyval.dynstr = ds("");
} break;
}
goto yystack; /* stack new state and value */
}
SHAR_EOF
cat << \SHAR_EOF > cdlex.c
# include "stdio.h"
# define U(x) x
# define NLSTATE yyprevious=YYNEWLINE
# define BEGIN yybgin = yysvec + 1 +
# define INITIAL 0
# define YYLERR yysvec
# define YYSTATE (yyestate-yysvec-1)
# define YYOPTIM 1
# define YYLMAX BUFSIZ
# define output(c) putc(c,yyout)
# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
# define yymore() (yymorfg=1)
# define ECHO fprintf(yyout, "%s",yytext)
# define REJECT { nstr = yyreject(); goto yyfussy;}
int yyleng; extern char yytext[];
int yymorfg;
extern char *yysptr, yysbuf[];
int yytchar;
FILE *yyin = {stdin}, *yyout = {stdout};
extern int yylineno;
struct yysvf {
struct yywork *yystoff;
struct yysvf *yyother;
int *yystops;};
struct yysvf *yyestate;
extern struct yysvf yysvec[], *yybgin;
/* Lexical analyzer description for ANSI and C++ cdecl. */
/* The output of this file is included */
/* into the C file cdecl.c. */
char cdlexsccsid[] = "@(#)cdlex.l 2.2 3/30/88";
# define YYNEWLINE 10
yylex(){
int nstr; extern int yyprevious;
while((nstr = yylook()) >= 0)
yyfussy: switch(nstr){
case 0:
if(yywrap()) return(0); break;
case 1:
return ARRAY;
break;
case 2:
return AS;
break;
case 3:
return CAST;
break;
case 4:
return DECLARE;
break;
case 5:
return 0;
break;
case 6:
return EXPLAIN;
break;
case 7:
return FUNCTION;
break;
case 8:
return FUNCTION;
break;
case 9:
return HELP;
break;
case 10:
return INTO;
break;
case 11:
return MEMBER;
break;
case 12:
return OF;
break;
case 13:
return POINTER;
break;
case 14:
return POINTER;
break;
case 15:
return 0;
break;
case 16:
return REFERENCE;
break;
case 17:
return REFERENCE;
break;
case 18:
return RETURNING;
break;
case 19:
return RETURNING;
break;
case 20:
return SET;
break;
case 21:
return TO;
break;
case 22:
return ARRAY;
break;
case 23:
return DOUBLECOLON;
break;
case 24:
return HELP;
break;
case 25:
return COMMA;
break;
case 26:
{ yylval.dynstr = ds(yytext); return AUTO; }
break;
case 27:
{ yylval.dynstr = ds("char"); return CHAR; }
break;
case 28:
{ yylval.dynstr = ds(yytext); return CHAR; }
break;
case 29:
{ yylval.dynstr = ds(yytext); return CLASS; }
break;
case 30:
{ yylval.dynstr = ds("const"); return CONSTVOLATILE; }
break;
case 31:
{ yylval.dynstr = ds(yytext); return CONSTVOLATILE; }
break;
case 32:
{ yylval.dynstr = ds(yytext); return DOUBLE; }
break;
case 33:
{ yylval.dynstr = ds("enum"); return ENUM; }
break;
case 34:
{ yylval.dynstr = ds(yytext); return ENUM; }
break;
case 35:
{ yylval.dynstr = ds(yytext); return EXTERN; }
break;
case 36:
{ yylval.dynstr = ds(yytext); return FLOAT; }
break;
case 37:
{ yylval.dynstr = ds("int"); return INT; }
break;
case 38:
{ yylval.dynstr = ds(yytext); return INT; }
break;
case 39:
{ yylval.dynstr = ds(yytext); return LONG; }
break;
case 40:
{ yylval.dynstr = ds(yytext); return CONSTVOLATILE; }
break;
case 41:
{ yylval.dynstr = ds(yytext); return REGISTER; }
break;
case 42:
{ yylval.dynstr = ds(yytext); return SHORT; }
break;
case 43:
{ yylval.dynstr = ds(yytext); return SIGNED; }
break;
case 44:
{ yylval.dynstr = ds(yytext); return STATIC; }
break;
case 45:
{ yylval.dynstr = ds("struct"); return STRUCT; }
break;
case 46:
{ yylval.dynstr = ds(yytext); return STRUCT; }
break;
case 47:
{ yylval.dynstr = ds(yytext); return UNION; }
break;
case 48:
{ yylval.dynstr = ds(yytext); return UNSIGNED; }
break;
case 49:
{ yylval.dynstr = ds(yytext); return VOID; }
break;
case 50:
{ yylval.dynstr = ds(yytext); return CONSTVOLATILE; }
break;
case 51:
{ yylval.dynstr = ds(yytext); return NAME; }
break;
case 52:
{ yylval.dynstr = ds(yytext); return NUMBER; }
break;
case 53:
;
break;
case 54:
;
break;
case 55:
return *yytext;
break;
case 56:
{
(void) printf("bad character '%s'\n",visible(*yytext));
return *yytext;
}
break;
case -1:
break;
default:
fprintf(yyout,"bad switch yylook %d",nstr);
} return(0); }
/* end of yylex */
int yyvstop[] = {
0,
56,
0,
54,
56,
0,
55,
0,
53,
56,
0,
55,
56,
0,
25,
56,
0,
52,
56,
0,
56,
0,
24,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
51,
56,
0,
53,
0,
52,
0,
23,
0,
51,
0,
51,
0,
2,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
12,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
21,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
38,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
14,
51,
0,
51,
0,
17,
51,
0,
51,
0,
19,
51,
0,
20,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
26,
51,
0,
3,
51,
0,
28,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
34,
51,
0,
5,
51,
0,
51,
0,
51,
0,
51,
0,
8,
51,
0,
9,
51,
0,
51,
0,
10,
51,
0,
39,
51,
0,
51,
0,
51,
0,
51,
0,
15,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
49,
51,
0,
51,
0,
1,
51,
0,
51,
0,
29,
51,
0,
31,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
36,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
42,
51,
0,
51,
0,
51,
0,
51,
0,
47,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
32,
51,
0,
51,
0,
51,
0,
35,
51,
0,
51,
0,
51,
0,
11,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
43,
51,
0,
44,
51,
0,
46,
51,
0,
51,
0,
22,
51,
0,
51,
0,
51,
0,
51,
0,
4,
51,
0,
51,
0,
6,
51,
0,
51,
0,
37,
51,
0,
40,
51,
0,
13,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
51,
0,
30,
51,
0,
51,
0,
7,
51,
0,
51,
0,
41,
51,
0,
51,
0,
51,
0,
48,
51,
0,
50,
51,
0,
27,
51,
0,
51,
0,
16,
51,
0,
18,
51,
0,
45,
51,
0,
51,
0,
33,
51,
0,
0};
# define YYTYPE int
struct yywork { YYTYPE verify, advance; } yycrank[] = {
0,0, 0,0, 1,3, 0,0,
0,0, 0,0, 0,0, 6,31,
0,0, 0,0, 1,4, 1,5,
0,0, 0,0, 0,0, 6,31,
6,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
1,6, 0,0, 0,0, 1,7,
0,0, 6,31, 0,0, 0,0,
6,31, 1,8, 0,0, 0,0,
0,0, 1,9, 6,31, 0,0,
0,0, 0,0, 6,31, 0,0,
0,0, 0,0, 0,0, 1,10,
10,33, 0,0, 0,0, 0,0,
1,11, 0,0, 1,12, 0,0,
0,0, 6,31, 0,0, 6,31,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 0,0, 0,0,
0,0, 2,10, 9,32, 9,32,
9,32, 9,32, 9,32, 9,32,
9,32, 9,32, 9,32, 9,32,
0,0, 0,0, 0,0, 0,0,
0,0, 0,0, 1,13, 0,0,
1,14, 1,15, 1,16, 1,17,
18,48, 1,18, 1,19, 31,0,
0,0, 1,20, 1,21, 1,22,
1,23, 1,24, 1,25, 1,26,
1,27, 1,28, 1,29, 1,30,
2,13, 17,46, 2,14, 2,15,
2,16, 2,17, 19,49, 2,18,
2,19, 20,50, 17,47, 2,20,
2,21, 2,22, 2,23, 2,24,
2,25, 2,26, 2,27, 2,28,
2,29, 2,30, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
13,35, 13,36, 21,51, 13,37,
22,52, 23,53, 25,56, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 24,54, 26,57, 28,62,
29,63, 12,34, 24,55, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 12,34, 12,34, 12,34,
12,34, 14,38, 27,58, 15,42,
16,44, 27,59, 27,60, 35,66,
14,39, 30,64, 37,67, 38,68,
14,40, 15,43, 16,45, 14,41,
39,69, 27,61, 40,70, 30,65,
41,71, 42,72, 43,73, 44,74,
45,75, 46,78, 47,79, 48,80,
49,81, 50,82, 51,83, 45,76,
52,84, 54,85, 55,86, 45,77,
56,87, 57,88, 57,89, 58,91,
59,92, 60,93, 61,94, 63,96,
64,98, 65,99, 66,101, 67,102,
65,100, 68,103, 69,104, 57,90,
70,105, 63,97, 71,106, 72,107,
73,108, 74,109, 75,110, 61,95,
76,111, 77,112, 78,113, 79,114,
80,115, 81,116, 82,118, 83,119,
84,120, 85,121, 87,122, 88,123,
89,124, 90,125, 92,126, 81,117,
93,127, 94,128, 95,129, 96,130,
97,131, 98,132, 99,133, 100,134,
101,135, 104,136, 105,137, 106,138,
107,139, 108,140, 109,141, 111,142,
112,143, 113,144, 114,145, 116,146,
119,147, 120,148, 121,149, 123,150,
124,151, 125,152, 126,153, 127,154,
128,155, 129,156, 130,157, 131,158,
132,159, 134,160, 136,161, 138,162,
139,163, 140,164, 141,165, 142,166,
143,167, 145,168, 146,169, 147,170,
148,171, 149,172, 150,173, 151,174,
152,175, 154,176, 155,177, 156,178,
158,179, 159,180, 160,181, 161,182,
162,183, 163,184, 165,185, 166,186,
168,187, 169,188, 171,189, 172,190,
173,191, 174,192, 175,193, 178,194,
179,195, 181,196, 182,197, 183,198,
185,199, 187,200, 191,201, 192,202,
193,203, 194,204, 195,205, 196,206,
197,207, 199,208, 201,209, 203,210,
204,211, 208,212, 212,213, 0,0,
0,0};
struct yysvf yysvec[] = {
0, 0, 0,
yycrank+-1, 0, 0,
yycrank+-23, yysvec+1, 0,
yycrank+0, 0, yyvstop+1,
yycrank+0, 0, yyvstop+3,
yycrank+0, 0, yyvstop+6,
yycrank+-6, 0, yyvstop+8,
yycrank+0, 0, yyvstop+11,
yycrank+0, 0, yyvstop+14,
yycrank+34, 0, yyvstop+17,
yycrank+2, 0, yyvstop+20,
yycrank+0, 0, yyvstop+22,
yycrank+94, 0, yyvstop+25,
yycrank+38, yysvec+12, yyvstop+28,
yycrank+120, yysvec+12, yyvstop+31,
yycrank+118, yysvec+12, yyvstop+34,
yycrank+110, yysvec+12, yyvstop+37,
yycrank+13, yysvec+12, yyvstop+40,
yycrank+3, yysvec+12, yyvstop+43,
yycrank+16, yysvec+12, yyvstop+46,
yycrank+18, yysvec+12, yyvstop+49,
yycrank+53, yysvec+12, yyvstop+52,
yycrank+45, yysvec+12, yyvstop+55,
yycrank+55, yysvec+12, yyvstop+58,
yycrank+74, yysvec+12, yyvstop+61,
yycrank+41, yysvec+12, yyvstop+64,
yycrank+85, yysvec+12, yyvstop+67,
yycrank+117, yysvec+12, yyvstop+70,
yycrank+76, yysvec+12, yyvstop+73,
yycrank+78, yysvec+12, yyvstop+76,
yycrank+124, yysvec+12, yyvstop+79,
yycrank+-97, yysvec+6, yyvstop+82,
yycrank+0, yysvec+9, yyvstop+84,
yycrank+0, 0, yyvstop+86,
yycrank+0, yysvec+12, yyvstop+88,
yycrank+109, yysvec+12, yyvstop+90,
yycrank+0, yysvec+12, yyvstop+92,
yycrank+110, yysvec+12, yyvstop+95,
yycrank+112, yysvec+12, yyvstop+97,
yycrank+135, yysvec+12, yyvstop+99,
yycrank+137, yysvec+12, yyvstop+101,
yycrank+126, yysvec+12, yyvstop+103,
yycrank+138, yysvec+12, yyvstop+105,
yycrank+121, yysvec+12, yyvstop+107,
yycrank+122, yysvec+12, yyvstop+109,
yycrank+135, yysvec+12, yyvstop+111,
yycrank+130, yysvec+12, yyvstop+113,
yycrank+132, yysvec+12, yyvstop+115,
yycrank+135, yysvec+12, yyvstop+117,
yycrank+128, yysvec+12, yyvstop+119,
yycrank+135, yysvec+12, yyvstop+121,
yycrank+137, yysvec+12, yyvstop+123,
yycrank+151, yysvec+12, yyvstop+125,
yycrank+0, yysvec+12, yyvstop+127,
yycrank+144, yysvec+12, yyvstop+130,
yycrank+136, yysvec+12, yyvstop+132,
yycrank+147, yysvec+12, yyvstop+134,
yycrank+151, yysvec+12, yyvstop+136,
yycrank+139, yysvec+12, yyvstop+138,
yycrank+145, yysvec+12, yyvstop+140,
yycrank+154, yysvec+12, yyvstop+142,
yycrank+161, yysvec+12, yyvstop+144,
yycrank+0, yysvec+12, yyvstop+146,
yycrank+154, yysvec+12, yyvstop+149,
yycrank+161, yysvec+12, yyvstop+151,
yycrank+156, yysvec+12, yyvstop+153,
yycrank+165, yysvec+12, yyvstop+155,
yycrank+152, yysvec+12, yyvstop+157,
yycrank+149, yysvec+12, yyvstop+159,
yycrank+152, yysvec+12, yyvstop+161,
yycrank+153, yysvec+12, yyvstop+163,
yycrank+155, yysvec+12, yyvstop+165,
yycrank+163, yysvec+12, yyvstop+167,
yycrank+174, yysvec+12, yyvstop+169,
yycrank+164, yysvec+12, yyvstop+171,
yycrank+158, yysvec+12, yyvstop+173,
yycrank+168, yysvec+12, yyvstop+175,
yycrank+176, yysvec+12, yyvstop+177,
yycrank+181, yysvec+12, yyvstop+179,
yycrank+180, yysvec+12, yyvstop+181,
yycrank+168, yysvec+12, yyvstop+183,
yycrank+180, yysvec+12, yyvstop+185,
yycrank+179, yysvec+12, yyvstop+188,
yycrank+185, yysvec+12, yyvstop+190,
yycrank+176, yysvec+12, yyvstop+192,
yycrank+175, yysvec+12, yyvstop+194,
yycrank+0, yysvec+12, yyvstop+196,
yycrank+170, yysvec+12, yyvstop+199,
yycrank+186, yysvec+12, yyvstop+201,
yycrank+183, yysvec+12, yyvstop+204,
yycrank+172, yysvec+12, yyvstop+206,
yycrank+0, yysvec+12, yyvstop+209,
yycrank+176, yysvec+12, yyvstop+212,
yycrank+182, yysvec+12, yyvstop+214,
yycrank+177, yysvec+12, yyvstop+216,
yycrank+177, yysvec+12, yyvstop+218,
yycrank+184, yysvec+12, yyvstop+220,
yycrank+191, yysvec+12, yyvstop+222,
yycrank+181, yysvec+12, yyvstop+224,
yycrank+198, yysvec+12, yyvstop+226,
yycrank+202, yysvec+12, yyvstop+228,
yycrank+179, yysvec+12, yyvstop+230,
yycrank+0, yysvec+12, yyvstop+232,
yycrank+0, yysvec+12, yyvstop+235,
yycrank+204, yysvec+12, yyvstop+238,
yycrank+187, yysvec+12, yyvstop+241,
yycrank+187, yysvec+12, yyvstop+243,
yycrank+207, yysvec+12, yyvstop+245,
yycrank+197, yysvec+12, yyvstop+247,
yycrank+205, yysvec+12, yyvstop+249,
yycrank+0, yysvec+12, yyvstop+252,
yycrank+210, yysvec+12, yyvstop+255,
yycrank+194, yysvec+12, yyvstop+257,
yycrank+193, yysvec+12, yyvstop+259,
yycrank+194, yysvec+12, yyvstop+261,
yycrank+0, yysvec+12, yyvstop+264,
yycrank+208, yysvec+12, yyvstop+267,
yycrank+0, yysvec+12, yyvstop+269,
yycrank+0, yysvec+12, yyvstop+272,
yycrank+211, yysvec+12, yyvstop+275,
yycrank+208, yysvec+12, yyvstop+277,
yycrank+198, yysvec+12, yyvstop+279,
yycrank+0, yysvec+12, yyvstop+281,
yycrank+201, yysvec+12, yyvstop+284,
yycrank+201, yysvec+12, yyvstop+286,
yycrank+203, yysvec+12, yyvstop+288,
yycrank+202, yysvec+12, yyvstop+290,
yycrank+218, yysvec+12, yyvstop+292,
yycrank+215, yysvec+12, yyvstop+294,
yycrank+222, yysvec+12, yyvstop+296,
yycrank+212, yysvec+12, yyvstop+298,
yycrank+220, yysvec+12, yyvstop+300,
yycrank+213, yysvec+12, yyvstop+302,
yycrank+0, yysvec+12, yyvstop+304,
yycrank+209, yysvec+12, yyvstop+307,
yycrank+0, yysvec+12, yyvstop+309,
yycrank+227, yysvec+12, yyvstop+312,
yycrank+0, yysvec+12, yyvstop+314,
yycrank+230, yysvec+12, yyvstop+317,
yycrank+214, yysvec+12, yyvstop+320,
yycrank+228, yysvec+12, yyvstop+322,
yycrank+216, yysvec+12, yyvstop+324,
yycrank+226, yysvec+12, yyvstop+326,
yycrank+222, yysvec+12, yyvstop+328,
yycrank+0, yysvec+12, yyvstop+330,
yycrank+228, yysvec+12, yyvstop+333,
yycrank+233, yysvec+12, yyvstop+335,
yycrank+221, yysvec+12, yyvstop+337,
yycrank+239, yysvec+12, yyvstop+339,
yycrank+236, yysvec+12, yyvstop+341,
yycrank+237, yysvec+12, yyvstop+343,
yycrank+223, yysvec+12, yyvstop+345,
yycrank+230, yysvec+12, yyvstop+347,
yycrank+0, yysvec+12, yyvstop+349,
yycrank+241, yysvec+12, yyvstop+352,
yycrank+243, yysvec+12, yyvstop+354,
yycrank+227, yysvec+12, yyvstop+356,
yycrank+0, yysvec+12, yyvstop+358,
yycrank+234, yysvec+12, yyvstop+361,
yycrank+231, yysvec+12, yyvstop+363,
yycrank+241, yysvec+12, yyvstop+365,
yycrank+231, yysvec+12, yyvstop+367,
yycrank+238, yysvec+12, yyvstop+369,
yycrank+248, yysvec+12, yyvstop+371,
yycrank+0, yysvec+12, yyvstop+373,
yycrank+253, yysvec+12, yyvstop+376,
yycrank+241, yysvec+12, yyvstop+378,
yycrank+0, yysvec+12, yyvstop+380,
yycrank+241, yysvec+12, yyvstop+383,
yycrank+239, yysvec+12, yyvstop+385,
yycrank+0, yysvec+12, yyvstop+387,
yycrank+239, yysvec+12, yyvstop+390,
yycrank+241, yysvec+12, yyvstop+392,
yycrank+246, yysvec+12, yyvstop+394,
yycrank+256, yysvec+12, yyvstop+396,
yycrank+253, yysvec+12, yyvstop+398,
yycrank+0, yysvec+12, yyvstop+400,
yycrank+0, yysvec+12, yyvstop+403,
yycrank+242, yysvec+12, yyvstop+406,
yycrank+259, yysvec+12, yyvstop+409,
yycrank+0, yysvec+12, yyvstop+411,
yycrank+253, yysvec+12, yyvstop+414,
yycrank+261, yysvec+12, yyvstop+416,
yycrank+247, yysvec+12, yyvstop+418,
yycrank+0, yysvec+12, yyvstop+420,
yycrank+248, yysvec+12, yyvstop+423,
yycrank+0, yysvec+12, yyvstop+425,
yycrank+255, yysvec+12, yyvstop+428,
yycrank+0, yysvec+12, yyvstop+430,
yycrank+0, yysvec+12, yyvstop+433,
yycrank+0, yysvec+12, yyvstop+436,
yycrank+267, yysvec+12, yyvstop+439,
yycrank+253, yysvec+12, yyvstop+441,
yycrank+258, yysvec+12, yyvstop+443,
yycrank+255, yysvec+12, yyvstop+445,
yycrank+270, yysvec+12, yyvstop+447,
yycrank+270, yysvec+12, yyvstop+449,
yycrank+258, yysvec+12, yyvstop+451,
yycrank+0, yysvec+12, yyvstop+453,
yycrank+268, yysvec+12, yyvstop+456,
yycrank+0, yysvec+12, yyvstop+458,
yycrank+273, yysvec+12, yyvstop+461,
yycrank+0, yysvec+12, yyvstop+463,
yycrank+272, yysvec+12, yyvstop+466,
yycrank+275, yysvec+12, yyvstop+468,
yycrank+0, yysvec+12, yyvstop+470,
yycrank+0, yysvec+12, yyvstop+473,
yycrank+0, yysvec+12, yyvstop+476,
yycrank+266, yysvec+12, yyvstop+479,
yycrank+0, yysvec+12, yyvstop+481,
yycrank+0, yysvec+12, yyvstop+484,
yycrank+0, yysvec+12, yyvstop+487,
yycrank+268, yysvec+12, yyvstop+490,
yycrank+0, yysvec+12, yyvstop+492,
0, 0, 0};
struct yywork *yytop = yycrank+378;
struct yysvf *yybgin = yysvec+1;
char yymatch[] = {
00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,
011 ,01 ,01 ,'#' ,01 ,01 ,'&' ,01 ,
'&' ,'&' ,'&' ,01 ,',' ,01 ,01 ,01 ,
'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
'0' ,'0' ,01 ,'&' ,01 ,01 ,01 ,'?' ,
01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
'A' ,'A' ,'A' ,'&' ,01 ,'&' ,01 ,'A' ,
01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 ,
0};
char yyextra[] = {
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0};
#ifndef lint
static char ncform_sccsid[] = "@(#)ncform 1.1 86/07/08 SMI"; /* from S5R2 1.2 */
#endif
int yylineno =1;
# define YYU(x) x
# define NLSTATE yyprevious=YYNEWLINE
char yytext[YYLMAX];
struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
char yysbuf[YYLMAX];
char *yysptr = yysbuf;
int *yyfnd;
extern struct yysvf *yyestate;
int yyprevious = YYNEWLINE;
yylook(){
register struct yysvf *yystate, **lsp;
register struct yywork *yyt;
struct yysvf *yyz;
int yych, yyfirst;
struct yywork *yyr;
# ifdef LEXDEBUG
int debug;
# endif
char *yylastch;
/* start off machines */
# ifdef LEXDEBUG
debug = 0;
# endif
yyfirst=1;
if (!yymorfg)
yylastch = yytext;
else {
yymorfg=0;
yylastch = yytext+yyleng;
}
for(;;){
lsp = yylstate;
yyestate = yystate = yybgin;
if (yyprevious==YYNEWLINE) yystate++;
for (;;){
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
# endif
yyt = yystate->yystoff;
if(yyt == yycrank && !yyfirst){ /* may not be any transitions */
yyz = yystate->yyother;
if(yyz == 0)break;
if(yyz->yystoff == yycrank)break;
}
*yylastch++ = yych = input();
yyfirst=0;
tryagain:
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"char ");
allprint(yych);
putchar('\n');
}
# endif
yyr = yyt;
if ( (int)yyt > (int)yycrank){
yyt = yyr + yych;
if (yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transitions */
{unput(*--yylastch);break;}
*lsp++ = yystate = yyt->advance+yysvec;
goto contin;
}
}
# ifdef YYOPTIM
else if((int)yyt < (int)yycrank) { /* r < yycrank */
yyt = yyr = yycrank+(yycrank-yyt);
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"compressed state\n");
# endif
yyt = yyt + yych;
if(yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transitions */
{unput(*--yylastch);break;}
*lsp++ = yystate = yyt->advance+yysvec;
goto contin;
}
yyt = yyr + YYU(yymatch[yych]);
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"try fall back character ");
allprint(YYU(yymatch[yych]));
putchar('\n');
}
# endif
if(yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transition */
{unput(*--yylastch);break;}
*lsp++ = yystate = yyt->advance+yysvec;
goto contin;
}
}
if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
# endif
goto tryagain;
}
# endif
else
{unput(*--yylastch);break;}
contin:
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"state %d char ",yystate-yysvec-1);
allprint(yych);
putchar('\n');
}
# endif
;
}
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
allprint(yych);
putchar('\n');
}
# endif
while (lsp-- > yylstate){
*yylastch-- = 0;
if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
yyolsp = lsp;
if(yyextra[*yyfnd]){ /* must backup */
while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
lsp--;
unput(*yylastch--);
}
}
yyprevious = YYU(*yylastch);
yylsp = lsp;
yyleng = yylastch-yytext+1;
yytext[yyleng] = 0;
# ifdef LEXDEBUG
if(debug){
fprintf(yyout,"\nmatch ");
sprint(yytext);
fprintf(yyout," action %d\n",*yyfnd);
}
# endif
return(*yyfnd++);
}
unput(*yylastch);
}
if (yytext[0] == 0 /* && feof(yyin) */)
{
yysptr=yysbuf;
return(0);
}
yyprevious = yytext[0] = input();
if (yyprevious>0)
output(yyprevious);
yylastch=yytext;
# ifdef LEXDEBUG
if(debug)putchar('\n');
# endif
}
}
yyback(p, m)
int *p;
{
if (p==0) return(0);
while (*p)
{
if (*p++ == m)
return(1);
}
return(0);
}
/* the following are only used in the lex library */
yyinput(){
return(input());
}
yyoutput(c)
int c; {
output(c);
}
yyunput(c)
int c; {
unput(c);
}
SHAR_EOF
cat << \SHAR_EOF > cdecl.notes
Here is a newer version of CDecl that supports ANSI C and C++, just in time for
those who owned Lattice's C++ ... ( I don't have it myself.. ).
cdgram.y and cdlex.l were generated from SunOS 3.4 yacc and lex.
I kept the original cdecl.c as cdecl.old.c because I wasn't sure I didn't spoil
any of the #ifdef's or #ifndef's.
The file makefile.old is the old UNIX makefile. The file cdgram.old.c is the
original output from yacc. cdgram.c is the same as cdgram.old.c without the
#line directives because It has caused me problems with sdb.
The code was compiled under Manx C 3.6a using the portability mode ( large code,
large data, 32 bit ints ).
Udi Finkelstein
10 Glitzenstein st.
Tel Aviv 64686 Israel
Phone: 972-3-263-927
BITNET: finkel@taurus.BITNET ( Best )
UUCP: ...!uunet!ulysses!attibr!althea!finkel ( Try avoiding this )
ARPA: finkel%taurus@cunyvm.cuny.edu ( Same as BITNET )
FIDO: Udi Finkelstein ( At 2:40/117 or 2:40/135
If you can get there at all!)
SHAR_EOF
# End of shell archive
exit 0
--
Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page
Have five nice days.